#!/bin/bash 
#########################################
#批量下载caida数据工具，
# 要求：
# 平台：Linux
# 环境：可访问caida linux系统已经安装了curl (ubuntu/Debian apt-get install curl)
# author: Mervin.Wong<mervin0502@163.com>
# site:http://blog.mervin.me
# data:2013-4-01
# Version: 0.2.2
#########################################
# 基本思想：三层循环
# 1,查找某个team
# 2,查找team下的某年a
# 3,查找team下的a年的b月
# 4,查找team下的a年b月的第i次探测 
#########################################
#下载的数据时间范围
#team 数组不得为空,目前CAIDA提供team1,team2,team3三组数据.
#实例:teams=(1 2 3); 
teams=(1); 
#年 数组不得为空，表示下载那几年的数据
#实例：years=(2008 2012 2013);
years=(2012);
#月 不足两位的补0 例如01 05 09 ;数组可为空，表示01~12全部月份
#实例：months=(01 02 03 04 05 08 11);
months=(01);
#第几次探测(周期)，如果为空，表示下载所有的探测数据
#实例：nums=(1 2 3 31);
nums=();
#数据存放目录
root="";
#日志文件
log=$root"/caida-ip-4-down.log";
#用户信息
name="XXX";
passwd="XXX";
#代理信息
proxy=http://ip:port
##########################################
#
# 以下数据不可修改
#
##########################################
#基本网址
url="https://topo-data.caida.org/team-probing/list-7.allpref24/cycle-aslinks/";
srcDir=$(pwd);
cd  $root;
user=$name":"$passwd;
#S:遍历 team
for team in ${teams[@]}
do
   #该team的数据存在
    if [[ !(-d $team) ]];then
        #$team 目录不存在，则创建
        mkdir "team-"$team;
    fi
    cd "team-"$team;

    #S:遍历年
    for year in ${years[@]}
    do
        pageByY=$url"team-"$team"/"$year"/";
        #echo $pageByY;
        msg=$(curl -x $proxy -u $user $pageByY);
        #echo $msg;
        state=$(echo $msg | grep -c  'Not Found');
        if [ $state -eq 0 ];then
            #该年的数据存在
            if [[ !(-d $year) ]];then
                #$year 目录不存在，则创建
                mkdir $year;
            fi
            cd $year;

            #获取$year的页面，并进行分析
            curl -x $proxy -u $user -o $year".txt" $pageByY;
            echo  $(date +%Y-%m-%d\ %H:%M:%S)" Download:"$pageByY >> $log;  

            #S:遍历月
            if [ ${#months[@]} -eq 0 ];then
                months=(01 02 03 04 05 06 07 08 09 10 11 12);
            fi
            for month in ${months[@]}
            do
                #判断$year$month是否存在
                str="cycle-aslinks\.l7\.t$team\.[0-9a-zA-Z]\+\.$year$month[0-3][0-9]";
                if [ $(grep -c -i -e $str $year".txt") -eq 0 ];then
                    continue;
                fi

                #创建月目录并进入
                if [[ !(-d $month) ]];then
                    mkdir $month
                fi
                cd $month;      

                #匹配查找
                str="cycle-aslinks\.l7\.t$team\.[0-9a-zA-Z]\+\.$year$month[0-3][0-9]";
                #str="topo-v6\.l8\.$year$month[0-3][0-9]\.[0-9]\+\.[0-9a-zA-Z-]\+\(\.warts\.gz\)";
                let i=1;
                pre="0";
                #获取本月提交数据的日期
                days=$(grep -o -i  -e ">"$str  "../"$year".txt"  |  grep -o -i "[0-3][0-9]\$");
                for e in ${days[@]}
                do 
                    if [ "$pre" != "$e" ];then
                        date[$i]=$e;
                        pre=$e;
                        let i+=1;
                    fi
                done

                #如果nums为空，则遍历所有
                if [ ${#nums[@]} -eq 0 ];then
                    let i=1;
                    for i in $(seq ${#date[@]})
                    do
                        nums[$i]=$i;
                        let i+=1;
                    done
                fi

                #S:遍历$nums
                for num in ${nums[@]}
                do
                    day=${date[$num]}; #获取第num次所对应的日期

                    str="cycle-aslinks\.l7\.t$team\.[0-9a-zA-Z]\+\.$year$month$day\(\.txt\.gz\)";
                    line=$(grep -o -i -e ">"$str  "../"$year".txt");
                    line=${line:1:${#line}-1};
                    if [[ (-f $line) ]];then
                        echo -e "\033[44;37;5m "$year"-"$month"-"$day"-"$line Existed!" \033[0m";
                    else
                        pageByN=$pageByY$line;
                        curl -x $proxy -u $user -O $pageByN;
                        #touch $line;
                        echo -e "\033[44;37;5m "$year"-"$month"-"$day"-"$line" \033[0m";
                    fi
                     echo  $(date +%Y-%m-%d\ %H:%M:%S)" Download: "$pageByY$line >>$log;                            
                done
                #E:遍历$nums

                cd ../ #退出$month目录 
            done
            #E:遍历月
            rm -f $year".txt";
            cd ../ #退出$year目录
        fi # state year    
    done 
    #E: 遍历年
    cd ../ #退出 $team目录
done
#E:遍历team
cd $srcDir;
